﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using MSDAL;
using MSWeb.Models;
using PagedList;
using System.Globalization;

namespace MSWeb
{
    public class EventProcessor
    {
        private MSEntities db;
        private static DateTime ConvertFromUnixTimestamp(double timestamp)
        {
            var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return origin.AddSeconds(timestamp);
        }

        DateTime ReturnDateToWarsawTimeZone(string newDate)
        {
            DateTime newDates = DateTime.Parse(newDate, null, DateTimeStyles.RoundtripKind);
            TimeZoneInfo usersTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
            return TimeZoneInfo.ConvertTimeFromUtc(newDates, usersTimeZone);
        }

        private static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
        {
            System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Local);
            dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
            return dtDateTime;
        }

        public EventProcessor()
        {
            db = new MSEntities();
        }

        public void AkgualizujLekcje(int id, string NewEventStart, string NewEventEnd)
        {
            Lekcje lekcja = db.Lekcje.FirstOrDefault(i => i.IDLekcji == id);
            if (lekcja != null)
            {
                DateTime newDate = ReturnDateToWarsawTimeZone(NewEventStart);
                lekcja.Data = newDate;
                if (!String.IsNullOrEmpty(NewEventEnd))
                {
                    DateTime eventNewDate = ReturnDateToWarsawTimeZone(NewEventEnd);
                    TimeSpan span = eventNewDate - newDate;
                    lekcja.CzasTrwaniaLekcji = Convert.ToInt32(span.TotalMinutes);
                }
                db.Entry(lekcja).State = EntityState.Modified;
                db.SaveChanges();
            }
        }

        public List<Events> GetLessonList(double from, double to)
        {
            //var fromDate = ReturnDateToWarsawTimeZone(UnixTimeStampToDateTime(from));
            DateTime endDate = ConvertFromUnixTimestamp(to);

            List<Lekcje> lekcje = new List<Lekcje>();
            List<Lekcje> res = db.Lekcje
                    .Include(l => l.Instrumenty)
                    .Include(l => l.Nauczyciele)
                    .Include(l => l.Sale)
                    .Include(l => l.Uczniowie)//.ToList();
            .Where(i => i.Data.Value.Year == endDate.Date.Year
            && i.Data.Value.Month == endDate.Date.Month
            && i.Data.Value.Day == endDate.Date.Day)
            .ToList();
            List<Events> eventList = new List<Events>();
            string color = "Red";
            res.ForEach(lekcja =>
            {
                DateTime dataPlus = lekcja.Data.Value.AddHours(1);
                try
                {
                    if (lekcja.CzyRozliczona == false)
                    {
                        color = "Red";
                    }
                    else
                    {
                        color = "Green";
                    }
                    eventList.Add(new Events
                    {
                        color = color,
                        id = lekcja.IDLekcji.ToString(),
                        start = lekcja.Data.Value.ToString("s"),
                        end = lekcja.Data.Value.AddMinutes(double.Parse(lekcja.CzasTrwaniaLekcji.ToString())).ToString("s"),
                        allDay = false,
                        title = "Nazwa Instrumentu: " + lekcja.Instrumenty.NazwaInstrumentu + " " +
                        "Uczeń: " + lekcja.Uczniowie.Imie + " " + lekcja.Uczniowie.Nazwisko + " " +
                        "Nauczyciel: " + lekcja.Nauczyciele.Imie + " " + lekcja.Nauczyciele.Nazwisko + " " +
                        "Sala: " + lekcja.Sale.NazwaSali
                    });
                }
                catch
                { }
            });
            return eventList;
        }


    }
}